package com.ttbj.api.company;

import java.util.List;

import com.ttbj.api.dto.CompanyDto;
import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.SalesmanDto;
import com.ttbj.api.exception.BusinessException;



public interface CompanyService {
	
	/**
	 * 通过公司编号，查询公司编号和名称，
	 * 条件是没有被禁用的查询出来
	 * @param salesmanDto 登录的用户
	 * @return
	 * @throws BusinessException
	 */
	public List<CompanyDto> findCompanyNumAndName(SalesmanDto salesmanDto) throws BusinessException;
	
	/**
	 * 查询公司的编号和名称，用于下拉框中选择哪个公司
	 * 条件是没有被禁用的查询出来
	 * @return
	 * @throws BusinessException
	 */
	public List<CompanyDto> findCompanyNumAndNameUsedSelect() throws BusinessException;
	
	/**
	 * 通过条件或者无条件查询所有的公司
	 * @param page 页码
	 * @param companyDto 公司信息
	 * @return 公司列表
	 * @throws BusinessException
	 */
	public List<CompanyDto> findCompanyPage(Page page, CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 通过条件或者无条件查询所有的公司
	 * @param companyDto 公司信息
	 * @return 公司数量
	 * @throws BusinessException
	 */
	public Integer findCompanyPageCount(CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 增加公司信息
	 * @param companyDto 公司
	 * @return CompanyDto对象，主要用于返回 comnumId 和 comnumNum
	 * @throws BusinessException
	 */
	public CompanyDto addCompanyInfo(CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 通过公司ID查询公司信息
	 * @param companyId 公司ID
	 * @return 公司信息
	 * @throws BusinessException
	 */
	public CompanyDto findCompanyById(Long companyId) throws BusinessException;
	
	/**
	 * 更新公司信息
	 * @param companyDto 公司信息
	 * @throws BusinessException
	 */
	public void editCompanyInfo(CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 更改公司是否停运状态。
	 * 在更改公司状态为停运的时候，该公司下的所有用户都不能再登录平台。
	 * @param isDelete 0未停运  1停运
	 * @param comnumId 
	 * @param comnumNum
	 * @throws BusinessException
	 */
	public void editCompanyDisable(Integer isDelete, Long comnumId, String comnumNum) throws BusinessException;
	
	
	
	/**
	 * 通过总公司的id，查询分公司的信息列表
	 * @param page 页码
	 * @param companyId 总公司id
	 * @return
	 * @throws BusinessException
	 */
	public List<CompanyDto> findBranchCompaynInfo(Page page, Long companyId) throws BusinessException;
	
	/**
	 * 通过总公司的id，查询分公司的信息列表数量
	 * @param companyId
	 * @return
	 * @throws BusinessException
	 */
	public Integer findBranchCompanyInfoCount(Long companyId) throws BusinessException;
	
	/**
	 * 通过总公司的id，查询分公司id列表
	 * @param companyId 总公司的id
	 * @return
	 * @throws BusinessException
	 */
	public List<Long> findBranchCompanyIdList(Long companyId) throws BusinessException;
	
	/**
	 * 通过分公司的id集合，批量更新分公司信息
	 * @param companyDto 总公司信息
	 * @param companyIds 
	 * @throws BusinessException
	 */
	public void editBranchCompanyInfo(CompanyDto companyDto, List<Long> companyIds) throws BusinessException;
	
	/**
	 * 通过总公司的编号查询公司的id
	 * @param comnumNum 总公司编号
	 * @return
	 * @throws BusinessException
	 */
	public Long findCompanyIdByNum(String comnumNum) throws BusinessException;
	
	/**
	 * 通过总公司编号查询所有分公司编号列表
	 * @param comnumNum 总公司编号
	 * @return
	 * @throws BusinessException
	 */
	public List<String> findBranchCompanyNum(String comnumNum) throws BusinessException;
	
	/**
	 * 通过总公司的编号查询所有分公司的id和名称
	 * @param comnumNum 总公司编号
	 * @return
	 * @throws BusinessException
	 */
	public List<CompanyDto> findBranchCompanyIdAndName(String comnumNum) throws BusinessException;
	
	/**
	 * 通过公司ID只查询公司账户信息 
	 * @param comnumId 公司ID
	 * @return
	 * @throws BusinessException
	 */
	public CompanyDto findCompanyOpenAccInfo(Long comnumId) throws BusinessException;
	
	/**
	 * 通过公司编号查询公司提现密码
	 * @param comnumNum 公司编号
	 * @return
	 */
	public String findWdPasswordByNum(String comnumNum);
	
	/**
	 * 使用易通金服进行增加账户开户以及账户信息
	 * @param companyDto 账户开户需要用到的信息
	 * @throws BusinessException
	 */
	public void addCompanyOpenAcc(CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 使用易通金服进行账户变更
	 * @param companyDto 账户变更需要用到的信息
	 * @throws BusinessException
	 */
	public void editCompanyAccModify(CompanyDto companyDto) throws BusinessException;
	
	/**
	 * 通过公司编号查询公司账户号
	 * @param comnumNum 公司编号
	 * @return
	 */
	public String findComnumAccountNoByNum(String comnumNum);
	
	/**
	 * 通过公司编号查询提现银行卡号和开户行
	 * @param comnumNum 公司编号
	 * @return
	 */
	public CompanyDto findBankCardAndNameByNum(String comnumNum);
	
}
